package com.smart.community.property.entity;

import javax.validation.constraints.NotNull;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.smart.community.commons.base.BaseEntity;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 权限审计日志实体类
 * 
 * 严格按照《Java后端SpringBoot代码开发规范.md》Entity规范实现：
 * - 继承BaseEntity：获得标准字段（id、createTime、updateTime、createBy、updateBy、version、deleted）
 * - 功能单一原则：Entity类必须是单纯的数据库字段映射的Bean对象，功能必须单一
 * - 禁止枚举类：所有枚举字段都使用String类型存储，避免使用枚举类
 * - 禁止工具方法：只保留基本的getter/setter方法，禁止添加工具方法
 * - 完整注释：所有字段都有完整的JavaDoc注释
 * - 字段映射：使用@TableField注解正确映射数据库字段
 * 
 * @author Wu.Liang
 * @since 2025-07-01
 * @version 3.0.0 - 根据新Entity规范调整
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sc_permission_audit_log")
@Schema(description = "权限审计日志实体")
public class PermissionAuditLog extends BaseEntity {
    /**
	 * @author Wu.Liang
	 * @date 2025年8月27日
	 */
	private static final long serialVersionUID = 3605000760955240142L;

	/**
     * 用户ID
     * 
     * <p>执行权限操作的用户ID，关联用户表。</p>
     */
    @Schema(description = "用户ID")
    @NotNull(message = "用户ID不能为空")
    @TableField("user_id")
    private Long userId;

    /**
     * 操作类型
     * 
     * <p>权限操作的类型，如：登录、权限分配、权限撤销等。</p>
     */
    @Schema(description = "操作类型")
    @NotNull(message = "操作类型不能为空")
    @TableField("operation")
    private String operation;

    /**
     * 操作目标
     * 
     * <p>权限操作的目标对象，如：用户、角色、权限等。</p>
     */
    @Schema(description = "操作目标")
    @TableField("target")
    private String target;

    /**
     * 操作结果（使用String类型存储）
     */
    @Schema(description = "操作结果")
    @TableField("result")
    private String result;

    /**
     * 详细信息
     * 
     * <p>权限操作的详细信息描述。</p>
     */
    @Schema(description = "详细信息")
    @TableField("details")
    private String details;

    /**
     * IP地址
     * 
     * <p>执行权限操作的客户端IP地址。</p>
     */
    @Schema(description = "IP地址")
    @TableField("ip_address")
    private String ipAddress;

    /**
     * 用户代理
     * 
     * <p>执行权限操作的客户端用户代理信息。</p>
     */
    @Schema(description = "用户代理")
    @TableField("user_agent")
    private String userAgent;

    // 只包含基本的getter/setter方法，不包含任何工具方法
} 